/*******************************************************************************
 * 文件名: ObjectReflect.java
 * 描    述: 标准对象转换类
 * 创建人: Dean Huang(hudi-112@163.com)
 * 日　期: 2017-12-22
 * 描　述: 文件描述
 * 版　本: 1.0
 *******************************************************************************/

package com.z1.core.reflect;

import java.util.Date;

import com.z1.core.format.DateFormat;
import com.z1.core.format.NumberFormat;

public class ObjectReflect {

	/**
	 * 标准对象转换
	 * @param type
	 * @param length
	 * @param precision
	 * @param value
	 * @return
	 */
	public static Object getObject(String type, int length, int precision, String value) {
		//整数
		if (type.equals("java.lang.Integer")) {
			if (null == value || value.equals("")) {
				return null;
			}
			if (-1 != value.indexOf(".")) {
				return (int)Double.parseDouble(value);
			}
			else {
				return Integer.parseInt(value);
			}
		}
		//长整数
		if (type.equals("java.lang.Long")) {
			if (null == value || value.equals("")) {
				return null;
			}
			if (-1 != value.indexOf(".")) {
				return (long)Double.parseDouble(value);
			}
			else {
				return Long.parseLong(value);
			}
		}
		//浮点数
		else if (type.equals("java.lang.Double") || type.equals("java.lang.Float")) {
			if (null == value || value.equals("")) {
				return null;
			}
			StringBuffer decimals = new StringBuffer("0");
			if (0 < precision) {
				decimals.append(".");
				for (int i = 0; i < precision; i++) {
					decimals.append("0");
				}
			}
			String v = NumberFormat.format(decimals.toString(), Double.parseDouble(value));
			if (v.charAt(0) == '.') {
				return Double.parseDouble("0" + v);
			}
			if (type.equals("java.lang.Double")) {
				return Double.parseDouble(v);
			}
			else {
				return Float.parseFloat(v);
			}
		}
		//时间
		else if (type.equals("java.util.Date")) {
			if (null == value || value.equals("")) {
				return null;
			}
			return DateFormat.parser(value);
		}
		else {
			if (null == value || value.equals("")) {
				return null;
			}
			if (length > 0 && value.length() > length) {
				return value.substring(0, length);
			}
			return value;
		}
	}
	
	/**
	 * 标准对象转换为字符串
	 * @param type
	 * @param length
	 * @param precision
	 * @param value
	 * @return
	 */
	public static String getString(String type, int length, int precision, Object value) {
		try {
			if (null == value) {
				return "";
			}
			//整数
			if (type.equals("java.lang.Integer")) {
				return value.toString();
			}
			//浮点数
			else if (type.equals("java.lang.Double")) {
				StringBuffer decimals = new StringBuffer('0');
				if (0 < precision) {
					decimals.append('.');
					for (int i = 0; i < precision; i++) {
						decimals.append('0');
					}
				}
				String v = NumberFormat.format(decimals.toString(), Double.parseDouble(value.toString()));
				if (v.charAt(0) == '.') {
					return "0" + v;
				}
				return v;
			}
			//时间
			else if (type.equals("java.util.Date")) {
				Date date = (Date)value;
				return DateFormat.formatString(date);
			}
			else {
				return value.toString();
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void main(String[] args) {
		System.out.println(getString("java.lang.Integer", 0, 0, 5));
		System.out.println(getString("java.lang.Double", 9, 5, 5.00000));
		System.out.println(getString("java.util.Date", 0, 0, new Date()));
		System.out.println(getString("java.lang.String", 20, 0, "ok"));
	}
	
}
